package com.tedu.api.list;

import org.junit.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *LinkedList实现类:双向链表实现---查询慢，增删快--【元素增删操作多
 * ArrayList实现类与LinkedList实现类大部分方法完全一致
 * 添加add() 删除remove() 获取get()
 * 获取集合长度size()	清空集合clear()
 * ----
 * ArrayList实现类与LinkedList实现类大部分方法不一致
 * addFirst(E e)
 * addFast(Ee)
 * removeFirst()
 * removeFast()
 */
public class LinkedListAPI<list> {
    /**
     *
     */
    @Test
    public void testIndexOf() {
//创建LinkedList双向链接集合对象
        List<String> listlinked = new LinkedList<>();
        listlinked.add("三吱");
        listlinked.add("龙虎斗");
        listlinked.add("掩汤");
        listlinked.add("螺蛳粉");
        /**补充方法:
         *index0f()	返回值:int
         *作用:返回元素指定下标位，如果找不到，返回-1
         */
        int lastIndex = listlinked.lastIndexOf("螺蛳粉");
//调用子类实现类lastIndexOf方法
        System.out.println("LinkedList的查找最后一个元素下标位:" + lastIndex);
    }
    /**
     addFirst(E e)	返回值:void
     作用:将指定元素添加链表头部
     addFast(E e)	返回值:void
     作用:将指定元素添加链接尾部
     removeFirst()  返回值:void
     作用:移除并返回链接的第一个元素，如果链表为空，抛出异常
     NoSuchElementException	没有这个元素异常
     removeFast()	返回值:void
     作用:移除并返回链接的最后一个元素，如果链表为空，指出异常
     NoSuchElementException 没有这个元素异常
     */
    @Test
    public void testLinkedList() {
        //创建集合对象：使用多态调用父类/【子类重写父类的方法】
        List<String> list = new LinkedList<>();
        list.add("熊猫计划");
        list.add("749");
        list.add("欲火之路");
        //子类-LinkedList没有重写父类-List的方法
        //多态--向下造型
        //((LinkedList)list)将list对象强转子类LinkedList
        ((LinkedList) list).addFirst("抓娃娃");
        ((LinkedList) list).addLast("三生三世");
        System.out.println("LinkedList集合打印：" + list);
        //需求：遍历LinkedList集合--Iterator迭代器
        //1.依赖Collection集合--List子集合接口--iterator（）
        Iterator<String> it = list.iterator();
        //2.循环遍历，Iterator迭代器：问、取    【删，选择使用】
        while (it.hasNext()) {//问：获取到集合元素
            String str = it.next();//取：获取集合元素
            System.out.println("迭代器支持Collection接口下所有类：" + str);
        }
        //需求：删除LinkedList集合元素中：抓娃娃的元素
//演示错误代码:LinkedList集合没有元素，删除LinkedList集合元素
// NoSuchElementException 没有这个元素异常
// 产生原因:集合没有元素，删除首尾元素
        ((LinkedList)list).removeFirst();
        System.out.println("使用链表集合删除第一个元素："+list);
    }
}